package com.xuhao.didi.socket.client.sdk.client.action;

import com.xuhao.didi.core.iocore.interfaces.ISendable;
import com.xuhao.didi.core.pojo.OriginalData;
import com.xuhao.didi.core.iocore.interfaces.IPulseSendable;
import com.xuhao.didi.socket.client.sdk.client.ConnectionInfo;

/**
 * Socket行为适配器,是行为监听器的一个Simple版本,详情请见{@link ISocketActionListener}
 * Created by xuhao on 2017/5/17.
 */

public abstract class SocketActionAdapter implements ISocketActionListener {
    /**
     * Socket通讯IO线程的启动
     *
     * @param action {@link IAction#ACTION_READ_THREAD_START}
     */
    @Override
    public void onSocketIOThreadStart(String action) {
    }

    /**
     * Socket通讯IO线程的关闭
     *
     * @param action {@link IAction#ACTION_READ_THREAD_SHUTDOWN}
     * @param e 线程关闭所遇到的异常信息,正常断开也可能会有异常信息
     */
    @Override
    public void onSocketIOThreadShutdown(String action, Exception e) {
    }

    /**
     * Socket断开后进行的回调
     *
     * @param info 这次连接的连接信息
     * @param action {@link IAction#ACTION_DISCONNECTION}
     * @param e Socket断开时的异常信息,如果是正常断开(调用disconnect()),异常信息将为null.使用e变量时应该进行判空操作
     */
    @Override
    public void onSocketDisconnection(ConnectionInfo info, String action, Exception e) {
    }

    /**
     * 当Socket连接建立成功后
     *
     * @param info 这次连接的连接信息
     * @param action {@link IAction#ACTION_CONNECTION_SUCCESS}
     */
    @Override
    public void onSocketConnectionSuccess(ConnectionInfo info, String action) {
    }

    /**
     * 当Socket连接失败时会进行回调
     *
     * @param info 这次连接的连接信息
     * @param action {@link IAction#ACTION_CONNECTION_FAILED}
     * @param e 连接未成功建立的错误原因
     */
    @Override
    public void onSocketConnectionFailed(ConnectionInfo info, String action, Exception e) {
    }

    /**
     * Socket通讯从服务器读取到消息后的响应
     *
     * @param info 连接
     * @param action 动作
     * @param data 数据
     */
    @Override
    public void onSocketReadResponse(ConnectionInfo info, String action, OriginalData data) {
    }

    /**
     * Socket通讯写出后的响应回调
     *
     * @param info 连接
     * @param action 动作
     * @param data 数据
     */
    @Override
    public void onSocketWriteResponse(ConnectionInfo info, String action, ISendable data) {
    }

    /**
     * Socket心跳发送后的回调
     *
     * @param info 这次连接的连接信息
     * @param data 心跳发送数据{@link IPulseSendable}
     */
    @Override
    public void onPulseSend(ConnectionInfo info, IPulseSendable data) {
    }
}
